Mathematical Calculation

- expr
- $[대괄호]
expr 1 + 5
하지만, expr에서 수식들은 bash에서 보통 다른 의미를 가지고 있는 키워드들로 구성되어 있다.
expr 2 * 5 # error
expr 2 \* 5
위처럼 반복적으로 이스케이프 문자를 사용해 주어야 하며,
변수에 수식 결과를 할당하기 위해 expr 명령을 치환해서 사용해야 함
#!/bin/bash
var1=10
var2=20
var3=$(expr $var2 / $var1)
echo The result is $var3
달러($)+대괄호[ ]
var1=$[1 + 5]
var2=$[$var1 * 2]
echo $var1
echo $var2
쉘은 대괄호 안의 ' * '를 와일드카드 문자가 아닌 수식으로 기대한다.
bash는 기본(built-in)적으로 정수 연산에 대해서만 지원한다.(부동 소수점 연산 불가능)
zsh은 built-in으로 부동 소수점 연산까지도 지원한다.
bc
~ » type bc
bc is /usr/bin/bc

bc는 계산기로 커맨드라인에서 부동 소수점 표현식을 입력할 수 있도록 한 다음 수식을 해석하고,
이를 계산하여 결과를 되돌려주는 프로그램이다.
- 숫자(정수 및 부동소수점)
- 변수(단순 변수와 배열 모두)
- 주석(#로 시작하는 줄 혹은 C의 /* */)
- 수식
- 프로그래밍 문(if-then 구문 등)
- 함수

bc 내부의 계산 결과는 scale 내장 변수를 이용해서 제어한다.(default scale=0이며, 출력할 소수점 이하 자리수를 설정한다)
bc # bc
bc -q # bc ()
###
var1=10
var2=var1/5
print var2
quit
스크립트에서 bc 사용하기
#!/bin/bash
variable=$(echo "options; expression" | bc)
# ex)
var1=$(echo "scale=4; 3.14/5" | bc)
echo The answer is $var1
연속적인 연산(inline input redirect)
variable=$(bc <<EOF
options
statements
expression
EOF
)
# ex)
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale=4
a1=($var1 * $var2)
b1=($var3 * $var4)
a1 + b1
EOF
)
echo The Final answer for this mess is $var5
위의 bc 내에서 계산과정에 생성된 변수들은 일지적으로 계산기(bc) 내에서만 사용가능하다.